//
//  BuddyListPacketCenter.h
//  HiQServer
//
//  Created by shoguncao on 12-8-1.
//  Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "PacketDispatchDelegate.h"

#define Notify_Send_BuddyList @"Notify_Send_BuddyList"

#define COLUM_OF_USERID_IN_TBFRIENDS 2  // 数据表 tbFriends 中 UserId 所在的列的列号
#define COLUM_OF_USERNAME_IN_TBUSER  1  // 数据表 tbUser 中 UserName 所在的列号
#define COLUM_OF_USERIMAGE_IN_TBUSER 3  // 数据表 tbUser 中 UserImage 所在的列号

#define QQ_NUM_LEN              0x000A  // QQ号码的最大长度
#define OP_BUDDY_LIST_REQUEST   0x0000  // 好友列表查询操作
#define OP_BUDDY_LIST_REPLY     0x0001  // 好友列表响应操作

#define ERR_NO_ERROR            0x0000  // 查询数据库无错误
#define ERR_NO_BUDDY            0x0001  // 发查询包的QQ号码不存在，或者该人无任何一个好友
#define ERR_TBFRIENDS_USERID    0x0002  // tbRriends 中的 UserId 字段无法获得
#define ERR_TBUSER_USER         0x0003  // tbUser 中未找到 UserId 对应的 User
#define ERR_TBUSER_USERNAME     0x0004  // tbUser 中可找到 UserId 对应的 User，但找不到 UserName 字段
#define ERR_TBUSER_USERIMAGE    0x0005  // tbUser 中可找到 UserId 对应的 User，但找不到 UserImage 字段

#define BUDDY_STATUS_ONLINE     0x0000  // 好友状态：在线
#define BUDDY_STATUS_OFFLINE    0x0001  // 好友状态：离线

#pragma pack(1)
typedef struct
{
    NSInteger type;                 // 包类型
    NSInteger operation;            // 操作类型
    NSInteger qq_num;    // 发包的QQ号码
} BUDDYLISTREQUESTHRD;
#pragma pack()

#pragma pack(1)
typedef struct
{
    NSInteger type;                 // 包类型
    NSInteger operation;            // 操作类型
    NSInteger error;                // 错误类型，若无错误，则此字段是 ERR_NO_ERROR(0x0000)，否则后面的字段没有解析的必要了
    NSInteger count;                // 好友数目
    NSInteger userid_len;           // UserId 占用的字节数
    NSInteger username_len;         // UserName 占用的字节数
    NSInteger userimage_len;        // UserImage 占用的字节数
    NSInteger userstatus_len;     // UserIsOnline 占用的字节数
    NSInteger userlistenport_len;   // UserListenPort 占用的字节数
    NSInteger userip_len;           // userip 占用的字节数
    //... 要发的 UserId 和 UserName 直接接在这儿进行发送，先是 UserId，再发 UserName
} BUDDYLISTREPLYHRD;
#pragma pack()

@interface BuddyListPacketCenter : NSObject<PacketDispatchDelegate>

- (void)notifySendBuddyList:(NSNotification *)notification;
// 产生查询回复包
- (NSData *)createBuddyListReplyPacket:(NSInteger)isError userCount:(NSInteger)count userId:(NSMutableArray *)userIdArray userName:(NSMutableArray *)userNameArray userImage:(NSMutableArray *)userImageArray userStatus:(NSMutableArray *)userStatusArray userListenPort:(NSMutableArray *)userListenPort userIp:(NSMutableArray *)userIpArray;

@end
